/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.brain.sgc.view.mbean;

import com.brain.conf.dto.MonedaDto;
import com.brain.conf.manager.MonedaManager;
import com.brain.core.common.UtilCore;
import com.brain.core.configuracion.WebServletContextListener;
import com.brain.core.dto.ArchivoDto;
import com.brain.core.dto.ParametroDto;
import com.brain.core.dto.UbigeoDto;
import com.brain.core.exception.DAOException;
import com.brain.core.manager.CatalogoManager;
import com.brain.core.manager.ParametroManager;
import com.brain.core.manager.RecursosManager;
import com.brain.core.manager.UbigeoManager;
import com.brain.core.view.mbean.ApplicationMBean;
import com.brain.core.view.mbean.ArchivoMBean;
import com.brain.core.view.mbean.GenericMBean;
import com.brain.core.view.mbean.SessionMBean;
import com.brain.core.view.util.ConstantesCore;
import com.brain.plan.dto.AfpDto;
import com.brain.plan.manager.AfpManager;
import com.brain.plan.view.util.ConstantesPlan;
import com.brain.sele.dto.CalificacionDto;
import com.brain.sele.dto.PostulanteDto;
import com.brain.sele.dto.RequerimientoDto;
import com.brain.sele.manager.CalificacionManager;
import com.brain.sele.manager.PostulanteManager;
import com.brain.sele.view.util.ConstantesSele;
import com.brain.sgc.dto.ConocimientoAdicionalDto;
import com.brain.sgc.dto.ConocimientoInformaticaDto;
import com.brain.sgc.dto.EstudioDto;
import com.brain.sgc.dto.ExperienciaDto;
import com.brain.sgc.dto.IdiomaDto;
import com.brain.sgc.dto.PersonaDto;
import com.brain.sgc.dto.ReferenciaDto;
import com.brain.sgc.manager.ConocimientoAdicionalManager;
import com.brain.sgc.manager.ConocimientoInformaticaManager;
import com.brain.sgc.manager.EstudioManager;
import com.brain.sgc.manager.ExperienciaManager;
import com.brain.sgc.manager.IdiomaManager;
import com.brain.sgc.manager.PersonaManager;
import com.brain.sgc.manager.ReferenciaManager;
import com.brain.sgc.view.util.ConstantesSgc;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.Serializable;
import java.math.BigDecimal;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import javax.annotation.Resource;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.faces.model.SelectItem;
import javax.imageio.stream.FileImageOutputStream;
import javax.mail.internet.InternetAddress;
import net.sf.jasperreports.engine.JRException;
import org.apache.log4j.Logger;
import org.primefaces.event.FileUploadEvent;
import org.primefaces.model.CroppedImage;
import org.primefaces.model.UploadedFile;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

/**
 *
 * @author Christian
 */
@Controller("personaMBean")
@Scope("session")
public class PersonaMBean extends GenericMBean implements Serializable {

    /**
     * Guarda las acciones del sistema en un archivo de texto plano
     *
     * @since 29/01/2014
     */
    private static Logger logger = Logger.getLogger(PersonaMBean.class);
    /**
     * Objeto de la clase PersonaManager
     *
     * @since 29/01/2014
     */
    @Resource
    private PersonaManager manager;
    /**
     * Objeto de la clase EstudioManager
     *
     * @since 29/01/2014
     */
    @Resource
    private EstudioManager estudioManager;
    /**
     * Objeto de la clase MonedaManager
     *
     * @since 29/01/2014
     */
    @Resource
    private MonedaManager monedaManager;
    /**
     * Objeto de la clase IdiomaManager
     *
     * @since 29/01/2014
     */
    @Resource
    private IdiomaManager idiomaManager;
    /**
     * Objeto de la clase CatalogoManager
     *
     * @since 29/01/2014
     */
    @Resource
    private CatalogoManager catalogoManager;
    /**
     * Objeto de la clase ParametroManager
     *
     * @since 29/01/2014
     */
    @Resource
    private ParametroManager parametroManager;
    /**
     * Objeto de la clase ExperienciaManager
     *
     * @since 29/01/2014
     */
    @Resource
    private ExperienciaManager experienciaManager;
    /**
     * Objeto de la clase ConocimientoAdicionalManager
     *
     * @since 29/01/2014
     */
    @Resource
    private ConocimientoAdicionalManager conocimientoAdicionalManager;
    /**
     * Objeto de la clase ConocimientoInformaticaManager
     *
     * @since 29/01/2014
     */
    @Resource
    private ConocimientoInformaticaManager informaticaManager;
    /**
     * Objeto de la clase CalificacionManager
     *
     * @since 29/01/2014
     */
    @Resource
    private CalificacionManager calificacionjManager;
    /**
     * Objeto de la clase PostulanteManager
     *
     * @since 29/01/2014
     */
    @Resource
    private PostulanteManager postulanteManager;
    /**
     * Objeto de la clase RecursosManager (acceso a metodos utilitarios)
     *
     * @since 29/01/2014
     */
    @Resource
    private RecursosManager recursosManager;
    /**
     * Objeto tipo lista de la clase PersonaDto
     *
     * @since 29/01/2014
     */
    private List<PersonaDto> lista;
    /**
     * Objeto de la entidad actual
     *
     * @since 29/01/2014
     */
    private PersonaDto dto;
    private int accionPersona;
    /**
     * Objeto de la entidad actual
     *
     * @since 29/01/2014
     */
    private PersonaDto dtoFiltro;
    /**
     * Titulo del formulario
     *
     * @since 29/01/2014
     */
    private String keyTitulo = "persona.panel";
    /**
     * objeto de la clase ApplicationMBean , acceso a la clase utilitaria de
     * configuración
     *
     * @since 29/01/2014
     */
    @Autowired
    private ApplicationMBean applicationMBean;
    /**
     * objeto de la clase SessionMBean
     *
     * @since 29/01/2014
     */
    @Autowired
    private SessionMBean sessionMBean;
    //Nuevo Estudio
    private int accionEstudio;
    /**
     * Objeto de la clase EstudioDto
     *
     * @since 28/01/2014
     */
    private EstudioDto estudioDto;
    /**
     * Objeto tipo lista de la clase ParametroDto
     *
     * @since 28/01/2014
     */
    private List<ParametroDto> listaNivel;
    /**
     * Objeto tipo lista de la clase ParametroDto
     *
     * @since 28/01/2014
     */
    private List<ParametroDto> listaEstadoEstudio;
    /**
     * Objeto tipo lista de la clase ParametroDto
     *
     * @since 28/01/2014
     */
    private List<ParametroDto> listaProfesion;
    //Parametros Idioma
    /**
     * Objeto de la clase IdiomaDto
     *
     * @since 28/01/2014
     */
    private IdiomaDto idiomaDto;
    /**
     * Objeto de la clase ParametroDto
     *
     * @since 28/01/2014
     */
    private ParametroDto idiomaParametroDto;
    /**
     * Tipos de pruebas
     *
     * @since 28/01/2014
     */
    private String oral;
    private String escrito;
    /**
     * Objeto tipo lista de la clase ParametroDto
     *
     * @since 28/01/2014
     */
    private List<ParametroDto> listaIdioma;
    //Parametros Herramientas Office
    /**
     * Objeto de la clase ConocimientoInformaticaDto
     *
     * @since 28/01/2014
     */
    private ConocimientoInformaticaDto informaticaDto;
    /**
     * Objeto de la clase ParametroDto
     *
     * @since 28/01/2014
     */
    private ParametroDto informaticaParametroDto;
    /**
     * Nivel de conocimiento de Informatica
     *
     * @since 28/01/2014
     */
    private String nivelInformatica;
    /**
     * Objeto de la clase ParametroDto
     *
     * @since 28/01/2014
     */
    private List<ParametroDto> listaHerramientaOffice;
    //Parametros Conocimiento Adicional
    /**
     * Objeto de la clase ConocimientoAdicionalDto
     *
     * @since 28/01/2014
     */
    private ConocimientoAdicionalDto conocimientoAdicionalDto;
    /**
     * Objeto de la clase ConocimientoAdicionalDto
     *
     * @since 28/01/2014
     */
    private String tituloConocAdicional;
    private String descripcionConocAdicional;
    //Parametros Experiencia Profesional
    private int accionExperiencia;
    /**
     * Objeto de la clase ExperienciaDto
     *
     * @since 28/01/2014
     */
    private ExperienciaDto experienciaDto;
    /**
     * Objeto tipo lista de la clase ParametroDto
     *
     * @since 28/01/2014
     */
    private List<ParametroDto> listaArea;
    /**
     * Objeto tipo lista de la clase ParametroDto
     *
     * @since 28/01/2014
     */
    private List<ParametroDto> listaIndustria;
    //Referencia
    /**
     * Objeto de la clase ReferenciaDto
     *
     * @since 28/01/2014
     */
    private ReferenciaDto referenciaDto;
    private String descripcionReferencia;
    /**
     * Objeto de la clase ReferenciaManager
     *
     * @since 28/01/2014
     */
    @Resource
    private ReferenciaManager referenciaManager;
    /**
     * Objeto tipo lista de la clase ParametroDto
     *
     * @since 28/01/2014
     */
    private List<ParametroDto> listaSexosFiltro;
    /**
     * Objeto tipo lista de la clase ParametroDto
     *
     * @since 28/01/2014
     */
    private List<ParametroDto> listaEstadoCivilFiltro;
    /**
     * Objeto tipo lista de la clase ParametroDto
     *
     * @since 28/01/2014
     */
    private List<ParametroDto> listaTipoDocumentoFiltro;
    /**
     * Objeto tipo lista de la clase ParametroDto
     *
     * @since 28/01/2014
     */
    private List<ParametroDto> listaSexos;
    /**
     * Objeto tipo lista de la clase ParametroDto
     *
     * @since 28/01/2014
     */
    private List<ParametroDto> listaEstadoCivil;
    /**
     * Objeto tipo lista de la clase ParametroDto
     *
     * @since 28/01/2014
     */
    private List<ParametroDto> listaTipoDocumento;
    /**
     * Objeto tipo lista de la clase MonedaDto
     *
     * @since 28/01/2014
     */
    private List<MonedaDto> listaTipoMoneda;
    /**
     * Objeto Booleano que indice el estado del boton Guardar
     *
     * @since 28/01/2014
     */
    private Boolean accesoBtnGuardar = Boolean.TRUE;
    /**
     * Objeto tipo lista de la clase CalificacionDto
     *
     * @since 28/01/2014
     */
    private List<CalificacionDto> listaEvaluaciones;
    /**
     * Objeto tipo lista de la clase RequerimientoDto
     *
     * @since 28/01/2014
     */
    private List<RequerimientoDto> listaRequerimientoDto;
    /**
     * Objeto tipo de la clase RequerimientoDto
     *
     * @since 28/01/2014
     */
    private RequerimientoDto requerimientoDto;
    /**
     * Objeto tipo lista de la clase ParametroDto
     *
     * @since 28/01/2014
     */
    private List<ParametroDto> listaTipoDoc;
    /**
     * Objeto tipo lista de la clase ParametroDto
     *
     * @since 28/01/2014
     */
    private List<ParametroDto> listaSexo;
    /**
     * Objeto tipo lista de la clase ParametroDto
     *
     * @since 28/01/2014
     */
    private List<ParametroDto> listaSedesFiltro;
    /**
     * Objeto tipo lista de la clase ParametroDto
     *
     * @since 28/01/2014
     */
    private List<ParametroDto> listaTiposArchivo;
    /**
     * Objeto tipo lista de la clase UbigeoDto
     *
     * @since 28/01/2014
     */
    private List<UbigeoDto> listaPaises;
    //Agregado para planillas
    /**
     * Objeto tipo lista de la clase ParametroDto
     *
     * @since 28/01/2014
     */
    private List<ParametroDto> listaCentRiesgo;
    /**
     * Objeto tipo lista de la clase ParametroDto
     *
     * @since 28/01/2014
     */
    private List<ParametroDto> listaTasaRiesgo;
    /**
     * Objeto tipo lista de la clase ParametroDto
     *
     * @since 28/01/2014
     */
    private List<ParametroDto> listaTipoRiesgo;
    /**
     * Objeto tipo lista de la clase AfpDto
     *
     * @since 28/01/2014
     */
    private List<AfpDto> listaAfp;
    /**
     * Objeto tipo lista de la clase ParametroDto
     *
     * @since 28/01/2014
     */
    private List<ParametroDto> listaBancos;
    /**
     * Objeto tipo lista de la clase ParametroDto
     *
     * @since 28/01/2014
     */
    private List<ParametroDto> listaTiposCuenta;
    /**
     * Objeto de la clase CroppedImage
     *
     * @since 28/01/2014
     */
    private CroppedImage croppedImage;
    private String strNombreFoto;
    /**
     * Objeto tipo array de la clase SelectItem
     *
     * @since 28/01/2014
     */
    private SelectItem[] strTipoComision;

    /**
     * Objeto de la clase ArchivoMBean (acceso a metodos utilitarios para crear
     * y personalizar archivos)
     *
     * @since 29/01/2014
     */
    @Resource
    private ArchivoMBean archivoMBean;
    /*
     * Metodo constructor de la clase actual
     @since 29/01/2014
     */

    public PersonaMBean() {
        this.dtoFiltro = new PersonaDto();
    }

    /**
     * Metodo que permite instanciar todos los objetos al iniciar el formulario
     *
     * @since 29/01/2014
     */
    public String iniciar() {
        this.dto = null;
        this.lista = null;
        this.dtoFiltro = new PersonaDto();
        this.dtoFiltro.setSedeDto(new ParametroDto());
        //this.dtoFiltro.setEstado(Boolean.TRUE);
        return ConstantesSgc.UrlNavegacion.URL_LISTA_PERSONA;
    }

    /**
     * Metodo que permite iniciar e instanciar dto para mostrar el historial de
     * personas
     *
     * @since 29/01/2014
     * @return retorna una ruta que muestra la pantalla del historial de
     * personas
     */
    public String iniciarHistorial() {
        this.dto = null;
        this.lista = null;
        this.dtoFiltro = new PersonaDto();
        return ConstantesSgc.UrlNavegacion.URL_LISTA_PERSONAS_HISTORIAL;
    }

    /**
     * Metodo que permite iniciar e instanciar el dto para gestionar legajos
     *
     * @since 29/01/2014
     * @return retorna una ruta que muestra el formulario de personas de legajo
     */
    public String iniciarLegajo() {
        this.lista = null;
        this.dtoFiltro = new PersonaDto();
        return ConstantesSgc.UrlNavegacion.URL_LISTA_PERSONAS_LEGAJO;
    }

    /**
     * Metodo que setea los valores del dto y construye el formulario para crear
     * un nuevo registro
     *
     * @since 29/01/2014
     * @return retorna la url de la nueva pagina
     */
    public String nuevo() {
        sessionMBean.setAccion(ConstantesSgc.Formulario.NUEVO);
        sessionMBean.setTitulo(recursosManager.construirTitulo(keyTitulo, sessionMBean.getAccion()));
        this.lista = new ArrayList<PersonaDto>();
        this.dto = manager.inicializar();
        this.estudioDto = this.estudioManager.inicializar();
        this.idiomaDto = this.idiomaManager.inicializar();

        return ConstantesSgc.UrlNavegacion.URL_PERSONA;
    }

    /**
     * Metodo que permite cargar los valores de un dto existente y construye el
     * formulario para editar un registro
     *
     * @since 29/01/2014
     * @return retorna la url de la pagina de editado
     */
    public String editar() {
        sessionMBean().setAccion(ConstantesSgc.Formulario.EDITAR);
        sessionMBean().setTitulo(recursosManager.construirTitulo(keyTitulo, sessionMBean().getAccion()));
        this.estudioDto = this.estudioManager.inicializar();
        this.experienciaDto = this.experienciaManager.inicializar();
        recuperarDtoPadre();
        archivoMBean.cargarArchivos(ConstantesCore.Entidad.PERSONA, this.dto.getId());
        return ConstantesSgc.UrlNavegacion.URL_PERSONA;
    }

    /**
     * Metodo que permite ver los datos existentes de un dto , sin opción a
     * editar o modificar algún valor
     *
     * @since 29/01/2014
     * @return retorna la url de la pagina principal del formulario
     */
    public String ver() {
        sessionMBean().setAccion(ConstantesSgc.Formulario.VER);
        sessionMBean().setTitulo(recursosManager.construirTitulo(keyTitulo, sessionMBean().getAccion()));
        return ConstantesSgc.UrlNavegacion.URL_PERSONA;
    }

    /**
     * Metodo que permite ver el historial de las acciones de un usuario sobre
     * el registro seleccionado
     *
     * @since 29/01/2014
     * @return retorna un valor nulo
     */
    public String verHistorial() {
        sessionMBean.setAccion(ConstantesSgc.Formulario.VER);
        sessionMBean.setTitulo(recursosManager.construirTitulo(keyTitulo, sessionMBean.getAccion()));
        this.cargarRequerimientosPorPersona();
        return ConstantesSgc.UrlNavegacion.URL_PERSONA_HISTORIAL;
    }

    /**
     * Metodo que permite cargar los requerimientos a una persona
     *
     * @since 29/01/2014
     */
    protected void cargarRequerimientosPorPersona() {
        try {
            this.listaRequerimientoDto = new ArrayList<RequerimientoDto>();
            List<PostulanteDto> listaPost = this.postulanteManager.obtenerPostulantesPorPersona(this.dto.getId());
            for (PostulanteDto post : listaPost) {
                post.getRequerimientoDto().setIdPostHistorial(post.getId());
                if (post.getNotaFinal() != null) {
                    post.getRequerimientoDto().setNotaFinalHistorial(post.getNotaFinal().toString());
                } else {
                    post.getRequerimientoDto().setNotaFinalHistorial("-");
                }

                if (post.getAcumulado() != null) {
                    post.getRequerimientoDto().setNotaAcumuladaHistorial(post.getAcumulado().toString());
                } else {
                    post.getRequerimientoDto().setNotaAcumuladaHistorial("-");
                }

                post.getRequerimientoDto().setEstadoHistorial(post.getEstadoDto().getDescripcion());
                this.listaRequerimientoDto.add(post.getRequerimientoDto());

            }
        } catch (DAOException ex) {
            logger.error("ERROR DE SISTEMA", ex);
            showError(ex.getMessage());
        }
    }

    /**
     * Metodo que permite cargar un pop-up para gestionar evaluaciones
     *
     * @since 29/01/2014
     */
    public void cargarPopupEvaluaciones() {
        try {
            //Obtenemos el id del postulante
            this.listaEvaluaciones = this.calificacionjManager.obtenerCalificacionesPorPostulanteHistorial(this.requerimientoDto.getIdPostHistorial());
            for (CalificacionDto calif : this.listaEvaluaciones) {
            }
        } catch (Exception ex) {
            logger.error("ERROR DE SISTEMA", ex);
            showError(ex.getMessage());
        }
    }

    /**
     * Metodo que permite cargar un pop-up para gestionar el detalle de la
     * entidad actual
     *
     * @since 29/01/2014
     */
    public void cargarDatosDialogDetalle() {
        //Cargamos los datos del dialog del detalle
        this.dto = this.manager.inicializarAux();
        this.accionPersona = applicationMBean.getNuevo();
    }

    /**
     * Metodo que permite buscar todos los registros de la entidad actual
     *
     * @param ae evento que se lanza al ejecutar una acción
     * @since 29/01/2014
     */
    public void buscar(ActionEvent ae) {

        try {
            this.lista = this.manager.obtenerPersonas(this.dtoFiltro);
        } catch (DAOException ex) {
            logger.error("ERROR DE SISTEMA", ex);
            showError(ex.getMessage());
        }

    }

    /**
     * Metodo que permite buscar el historial de la persona
     *
     * @param ae evento que se lanza al ejecutar una acción
     * @since 29/01/2014
     */
    public void buscarHistorial(ActionEvent ae) {

        try {
            this.lista = this.manager.obtenerPersonasHistorial(this.dtoFiltro);
        } catch (DAOException ex) {
            logger.error("ERROR DE SISTEMA", ex);
            showError(ex.getMessage());
        }

    }

    /**
     * Metodo que permite buscar empleados cmac
     *
     *
     * @since 29/01/2014
     */
    public void buscarEmpleadoCMAC() {

        try {
            this.lista = this.manager.obtenerEmpleados(this.dtoFiltro);
        } catch (DAOException ex) {
            logger.error("ERROR DE SISTEMA", ex);
            showError(ex.getMessage());
        }

    }

    /**
     * Metodo que permite buscar todas las personas de la entidad
     *
     *
     * @since 29/01/2014
     */
    public void buscarPersonas() {
        try {
            this.lista = this.manager.obtenerPersonasParaConvocatoria(this.dtoFiltro);
        } catch (DAOException ex) {
            logger.error("ERROR DE SISTEMA", ex);
            showError(ex.getMessage());
        }

    }

    /**
     * Metodo que permite buscar todas las personas disponibles para las
     * encuestas
     *
     *
     * @since 29/01/2014
     */
    public void buscarPersonasEncuestas() {
        try {
            this.lista = this.manager.obtenerPersonasParaEncuesta(this.dtoFiltro);
        } catch (DAOException ex) {
            logger.error("ERROR DE SISTEMA", ex);
            showError(ex.getMessage());
        }

    }

    /**
     * Metodo que permite ver el legajo de la persona
     *
     * @since 29/01/2014
     */
    public String verLegajo() {
        LegajoMBean legajoMBean = (LegajoMBean) WebServletContextListener.getApplicationContext().getBean("legajoMBean");
        legajoMBean.setPersonaDto(this.dto);
        legajoMBean.setUrlInvocador(ConstantesSgc.UrlNavegacion.URL_LISTA_PERSONAS_LEGAJO);
        return legajoMBean.iniciar();
    }

    /**
     * Metodo que permite validar los campos obligatorios de la persona
     *
     *
     * @since 29/01/2014
     */
    private boolean isValidDatosPersona(PersonaDto dto) {
        boolean validaPersona = Boolean.TRUE;
        try {
            List<PersonaDto> lPersonDto = this.manager.obtenerPersonaTipoYNroDocumento(dto.getTipoDocumentoDto().getId(), dto.getNumeroDocumento());
            if (!this.manager.obtenerPersonaTipoYNroDocumento(dto.getTipoDocumentoDto().getId(), dto.getNumeroDocumento()).isEmpty()) {
                recursosManager.showWarning("El Tipo y Número de documento ingresado ya existe en la BD.");
                validaPersona = false;
            }

            if (this.manager.obtenerPersonaPorEmail(dto.getEmail()) != null
                    && this.manager.obtenerPersonaPorEmail(dto.getEmail()).size() > 0) {
                recursosManager.showWarning("El email ingresado ya existe en la BD.");
                validaPersona = false;
            }

            InternetAddress mail = new InternetAddress();
            mail.setAddress(dto.getEmail());
        } catch (DAOException e) {
            logger.error(e);
        }
        return validaPersona;
    }

    /**
     * Metodo que permite validar los datos obligatorios en la entidad de
     * estudio
     *
     * @since 29/01/2014
     */
    private boolean isValidDatosEstudio(EstudioDto dto) {
        boolean validaEstudio = Boolean.TRUE;

        if (dto.getFechaFin() != null && dto.getFechaInicio() != null) {
            if (dto.getFechaFin().compareTo(dto.getFechaInicio()) <= 0) {
                recursosManager.showWarning("La Fecha de Fin no puede ser menor a la Fecha de Inicio.");
                validaEstudio = false;
            }
        }

        if (dto.getMateriaAprobada() != null && dto.getMateriaCantidad() != null) {
            if (dto.getMateriaAprobada() > dto.getMateriaCantidad()) {
                recursosManager.showWarning("La cantidad de Materias Aprobadas no puede ser mayor a la cantidad de materias.");
                validaEstudio = false;
            }
        }

        return validaEstudio;
    }

    /**
     * Metodo que permite validar los datos obligatorios en la entidad de Idioma
     *
     * @since 29/01/2014
     */
    private boolean isValidDatosIdioma(IdiomaDto dto) {
        boolean validaIdioma = Boolean.TRUE;
        try {
            if (this.idiomaManager.obtenerCantidad(dto) > 0) {
                recursosManager.showWarning("El Idioma ingresado ya existe en la BD.");
                validaIdioma = false;
            }
        } catch (DAOException e) {
            logger.error(e);
        }
        return validaIdioma;
    }

    /**
     * Metodo que permite validar los datos obligatorios en la entidad
     * Informatica
     *
     * @since 29/01/2014
     */
    private boolean isValidDatosInformatica(ConocimientoInformaticaDto dto) {
        boolean validaInformatica = Boolean.TRUE;
        try {
            if (this.informaticaManager.obtenerInformaticaPorDto(dto) != null
                    && this.informaticaManager.obtenerInformaticaPorDto(dto).size() > 0) {
                recursosManager.showWarning("La Herramienta Informática ya existe en la BD.");
                validaInformatica = false;
            }
        } catch (DAOException e) {
            logger.error(e);
        }
        return validaInformatica;
    }

    /**
     * Metodo que permite validar los datos obligatorios en la entidad de
     * Experiencia
     *
     * @since 29/01/2014
     */
    private boolean isValidDatosExperiencia(ExperienciaDto dto) {
        boolean validaExperiencia = Boolean.TRUE;

        if (dto.getFechaFin() != null && dto.getFechaInicio() != null) {
            if (dto.getFechaFin().compareTo(dto.getFechaInicio()) <= 0) {
                recursosManager.showWarning("La Fecha de Fin no puede ser menor a la Fecha de Inicio.");
                validaExperiencia = false;
            }
        }
        return validaExperiencia;
    }

    /**
     * Metodo que permite validar los datos obligatorios en la entidad de
     * Referencia
     *
     * @since 29/01/2014
     */
    private boolean isValidDatosReferencia(ReferenciaDto dto) {
        boolean validaReferencia = Boolean.TRUE;
        if (dto.getDescripcion() == null || dto.getDescripcion().equals("")) {
            recursosManager.showWarning("La Descripción no puede estar vacía.");
            validaReferencia = false;
        }
        return validaReferencia;
    }

    /**
     * Metodo que permite validar los datos obligatorios en la entidad de
     * Conocimiento Adicional
     *
     * @since 29/01/2014
     */
    private boolean isValidDatosConocimientoAdic(ConocimientoAdicionalDto dto) {
        boolean validaConocAdicional = Boolean.TRUE;
        try {
            if (this.conocimientoAdicionalManager.obtenerConocimientoAdicPorTitulo(dto) != null
                    && this.conocimientoAdicionalManager.obtenerConocimientoAdicPorTitulo(dto).size() > 0) {
                recursosManager.showWarning("El titulo ingresado ya existe en la BD.");
                validaConocAdicional = false;
            }
        } catch (DAOException e) {
            logger.error(e);
        }
        return validaConocAdicional;
    }

    /**
     * Metodo que permite gestionar las acciones DML del objeto dto de la
     * entidad actual
     *
     * @since 29/01/2014
     * @return retorna la url de la pagina de financiamientoLetra o ún valor
     * nulo en caso pase un error
     */
    public String guardar() {
        if (sessionMBean.getAccion() == ConstantesSgc.Formulario.NUEVO) {
            if (isValidDatosPersona(this.dto) == false) {
                logger.info("Datos inválidos. Se aborta el proceso de grabación.");
                return "";
            }
        }

        if (this.manager.guardar(this.dto) != null) {
            if (this.dto.getId() != null) {
                sessionMBean.setAccion(ConstantesSgc.Formulario.EDITAR);
            }
        }
        return "";
    }

    /**
     * Metodo que permite guardar la foto de la persona
     *
     * @since 29/01/2014
     * @return retorna un valor nulo
     *
     */
    public String cropFoto() {

        String path = FacesContext.getCurrentInstance().getExternalContext().getRealPath("/archivos/temp");
        String archivo = path + File.separator + this.strNombreFoto;

        try {

            if (croppedImage != null) {
                FileImageOutputStream imageOutput = new FileImageOutputStream(new File(archivo));
                imageOutput.write(croppedImage.getBytes(), 0, croppedImage.getBytes().length);
                imageOutput.close();
            } else {
                OutputStream outStream = new FileOutputStream(new File(archivo));
                InputStream inputStream = new FileInputStream(path + "/temp/" + this.strNombreFoto);
                byte[] buffer = new byte[6124];
                int bulk;
                while (true) {
                    bulk = inputStream.read(buffer);
                    if (bulk < 0) {
                        break;
                    }
                    outStream.write(buffer, 0, bulk);
                    outStream.flush();
                }
                outStream.close();
                inputStream.close();
            }

            //Generamos el dtoArchivo en PersonaDto
            ArchivoDto archivoDto = new ArchivoDto();
            archivoDto.setNombre(this.strNombreFoto);
            archivoDto.setTipoDto(null);
            archivoDto.setPeso(BigDecimal.ZERO);
            archivoDto.setComentario("NUEVO ARCHIVO");
            archivoDto.setEsAtributo(Boolean.FALSE);
            archivoDto.setTerminal(this.sessionMBean.getSessionTerminal());
            archivoDto.setFecha(UtilCore.Fecha.obtenerFechaActualDate());
            archivoDto.setBites(this.croppedImage.getBytes());
            archivoDto.setDetalle(archivoDto.getNombre());
            archivoDto.setEstado(Boolean.TRUE);
            if (archivoDto.getNombre().indexOf(".") != -1) {
                archivoDto.setExtension(archivoDto.getNombre().substring(archivoDto.getNombre().lastIndexOf(".") + 1, archivoDto.getNombre().length()));
            }
            this.dto.setArchivoFotoDto(archivoDto);
            System.out.println(this.strNombreFoto);
            this.croppedImage = null;
            this.strNombreFoto = null;
        } catch (FileNotFoundException e) {
            e.printStackTrace();
            System.out.println("ERROR : " + e.getMessage());
        } catch (IOException e) {
            e.printStackTrace();
            System.out.println("ERROR : " + e.getMessage());
        } catch (Exception e) {
            System.out.println("ERROR : " + e.getMessage());
        }

        return null;
    }

    /**
     * Metodo que permite mostrar un cuadro de dialogo para importar archivos a
     * la entidad actual
     *
     * @since 29/01/2014
     * @param event objeto de la clase FileUploadEvent
     */
    public void listenerFile(FileUploadEvent event) {
        UploadedFile file = event.getFile();
        this.strNombreFoto = file.getFileName();
        try {
            String path = FacesContext.getCurrentInstance().getExternalContext().getRealPath("/archivos/temp");
            String archivo = path + File.separator + file.getFileName();
            System.out.println(archivo);
            FileOutputStream fileOutputStream = new FileOutputStream(archivo);
            byte[] buffer = new byte[6124];
            int bulk;
            InputStream inputStream = event.getFile().getInputstream();
            while (true) {
                bulk = inputStream.read(buffer);
                if (bulk < 0) {
                    break;
                }
                fileOutputStream.write(buffer, 0, bulk);
                fileOutputStream.flush();
            }
            fileOutputStream.close();
            inputStream.close();

        } catch (IOException e) {
            logger.error(e);
            showError(e.getMessage());
        }
        System.out.println("HOLA");
    }

    /**
     * Metodo que permite retroceder , del formulario actual . A la lista de
     * búsqueda
     *
     * @since 29/01/2014
     * @return retorna la url de la pagina de busqueda de entidad actual
     */
    public String retroceder() {
        buscar(null);
        sessionMBean.setAccion(ConstantesSgc.Formulario.LISTA);
        sessionMBean().setTitulo(recursosManager.construirTitulo(keyTitulo, sessionMBean().getAccion()));
        return ConstantesSgc.UrlNavegacion.URL_LISTA_PERSONA;
    }

    /**
     * Metodo que permite retroceder , del formulario actual . A la lista de
     * búsqueda de historial de personas
     *
     * @since 29/01/2014
     * @return retorna la url de la lista de historial de personas
     */
    public String retrocederhistorial() {
        buscarHistorial(null);
        sessionMBean.setAccion(ConstantesSgc.Formulario.LISTA);
        sessionMBean().setTitulo(recursosManager.construirTitulo(keyTitulo, sessionMBean().getAccion()));
        return ConstantesSgc.UrlNavegacion.URL_LISTA_PERSONAS_HISTORIAL;
    }

    /**
     * Metodo que setea los valores del la clase EstudioDto y construye el
     * formulario para crear un nuevo registro
     *
     * @since 29/01/2014
     * @return retorna una cadena vacia
     */
    public String nuevoEstudio() {
        this.accionEstudio = applicationMBean.getNuevo();
        this.estudioDto = estudioManager.inicializar();
        return "";
    }

    /**
     * Metodo que permite cargar los datos a un pop-up para editarlos
     *
     * @since 29/01/2014
     * @return retorna una cadena vacia
     */
    public String editarEstudio() {
        this.accionEstudio = applicationMBean.getEditar();
        return "";
    }

    /**
     * Metodo que permite cargar datos para verlos
     *
     * @since 29/01/2014
     * @return retorna una cadena vacia
     */
    public String verEstudio() {
        this.accionEstudio = applicationMBean.getVer();
        //ApplicationHelper.cargarPropietarios(ConstantesCore.Entidad.ESTUDIO, this.estudioDto.getId());
        return "";
    }

    /**
     * Metodo que permite eliminar el estudio seleccionado
     *
     * @since 29/01/2014
     */
    public void eliminarEstudio() {
        try {
            this.estudioManager.eliminar(this.estudioDto);
            this.recuperarDtoPadre();
            showMessage(UtilCore.Internacionalizacion.getMensajeInternacional("form.general.mensaje.transaccion.ok"));
        } catch (Exception ex) {
            logger.error("ERROR DE SISTEMA", ex);
            showError(ex.getMessage());
        }
    }

    /**
     * Metodo que permite agregar un estudio a la persona
     *
     * @since 29/01/2014
     */
    public String agregarEstudio() {
        if (isValidDatosEstudio(this.estudioDto) == false) {
            logger.info("Se aborta el proceso de grabado.");
            return "";
        }
        return this.estudioManager.guardar(this.estudioDto, this.accionEstudio, this.dto);
    }

    /**
     * Metodo que permite asignar un estudio principal a la persona
     *
     * @since 29/01/2014
     */
    public void setEstudioPrincipal() {
        try {
            this.estudioManager.setEstudioPrincipal(this.estudioDto);
            this.recuperarDtoPadre();
        } catch (Exception ex) {
            logger.error("ERROR DE SISTEMA", ex);
            showError(ex.getMessage());
        }
    }

    /**
     * Metodo que permite agregar un idioma a la persona
     *
     * @since 29/01/2014
     */
    public void agregarIdioma() {
        try {
            IdiomaDto idiomaDto = new IdiomaDto();
            idiomaDto.setIdiomaDto(this.idiomaParametroDto);
            idiomaDto.setPersonaDto(this.dto);
            idiomaDto.setOral(this.oral);
            idiomaDto.setEscrito(this.escrito);
            if (isValidDatosIdioma(idiomaDto) == false) {
                return;
            }
            this.idiomaManager.nuevo(idiomaDto);
            recuperarDtoPadre();
            showMessage(UtilCore.Internacionalizacion.getMensajeInternacional("form.general.mensaje.transaccion.ok"));
        } catch (Exception ex) {
            logger.error("ERROR DE SISTEMA", ex);
        }
        this.idiomaParametroDto = null;
        this.oral = null;
        this.escrito = null;
    }

    /**
     * Metodo que permite eliminar el idioma seleccionado
     *
     * @since 29/01/2014
     */
    public void eliminarIdioma() {
        try {
            this.idiomaManager.eliminar(this.idiomaDto);
            this.recuperarDtoPadre();
            showMessage(UtilCore.Internacionalizacion.getMensajeInternacional("form.general.mensaje.transaccion.ok"));
        } catch (Exception ex) {
            logger.error("ERROR DE SISTEMA", ex);
            showError(ex.getMessage());
        }
    }

    /**
     * Metodo que permite imprimir los valores existentes de un dto seleccionado
     * Se exportan todos los detalles asociados al dto seleccionado
     *
     * @since 29/01/2014
     * @return retorna un valor vacio
     */
    public String imprimirDto() {
        try {
            String nombreArchivoReporte = "PERSONA_NRO_" + this.dto.getId();
            HashMap parametros = new HashMap();
            parametros.put("P_IDENTIFICADOR", BigDecimal.valueOf(this.dto.getId()));
            recursosManager.viewReportePdf(parametros, "RptPersona", nombreArchivoReporte);
            return null;
        } catch (FileNotFoundException ex) {
            showError("EL ARCHIVO NO SE ENCUENTRA");
            logger.error(ex);
        } catch (JRException ex) {
            logger.error(ex);
            showError("ERROR EN LA COMPILACIÓN DEL REPORTE");
        } catch (IOException ex) {
            showError("EL ARCHIVO ESTÁ DAÑADO");
            logger.error(ex);
        } catch (SQLException ex) {
            logger.error(ex);
            showError("ERROR EN LA CONSULTA DEL REPORTE");
        } finally {
            return null;
        }
    }

    /**
     * Metodo que permite agregar informacion del conocimiento en informatica
     * que tiene la persona
     *
     * @since 29/01/2014
     *
     */
    public void agregarHerramientaInformatica() {
        try {
            ConocimientoInformaticaDto conocInformaticaDto = new ConocimientoInformaticaDto();
            conocInformaticaDto.setPersonaDto(this.dto);
            conocInformaticaDto.setHerramientaOfficeDto(this.informaticaParametroDto);
            conocInformaticaDto.setNivel(this.nivelInformatica);
            if (isValidDatosInformatica(conocInformaticaDto) == false) {
                logger.info("Se aborta el proceso de grabado.");
                return;
            }
            this.informaticaManager.nuevo(conocInformaticaDto);
            recuperarDtoPadre();
            showMessage(UtilCore.Internacionalizacion.getMensajeInternacional("form.general.mensaje.transaccion.ok"));
        } catch (Exception ex) {
            logger.error("ERROR DE SISTEMA", ex);
        }
        this.informaticaParametroDto = null;
        this.nivelInformatica = null;
    }

    /**
     * Metodo que permite eliminar un registro de la informacion , del
     * conocimiento en informatica que tiene la persona
     *
     * @since 29/01/2014
     *
     */
    public void eliminarHerramientaInformatica() {
        try {
            this.informaticaManager.eliminar(this.informaticaDto);
            this.recuperarDtoPadre();
            showMessage(UtilCore.Internacionalizacion.getMensajeInternacional("form.general.mensaje.transaccion.ok"));
        } catch (Exception ex) {
            logger.error("ERROR DE SISTEMA", ex);
            showError(ex.getMessage());
        }
    }

    /**
     * Metodo que permite agregar informacion del conocimiento en adicional que
     * tiene la persona
     *
     * @since 29/01/2014
     *
     */
    public void agregarConocimientoAdicional() {
        try {
            ConocimientoAdicionalDto conocAdicionalDto = new ConocimientoAdicionalDto();
            conocAdicionalDto.setPersonaDto(this.dto);
            conocAdicionalDto.setTitulo(this.tituloConocAdicional);
            conocAdicionalDto.setDescripcion(this.descripcionConocAdicional);
            if (isValidDatosConocimientoAdic(conocAdicionalDto) == false) {
                logger.info("Se aborta el proceso de grabado.");
                return;
            }
            this.conocimientoAdicionalManager.nuevo(conocAdicionalDto);
            recuperarDtoPadre();
            showMessage(UtilCore.Internacionalizacion.getMensajeInternacional("form.general.mensaje.transaccion.ok"));
        } catch (Exception ex) {
            logger.error("ERROR DE SISTEMA", ex);
        }
        this.tituloConocAdicional = null;
        this.descripcionConocAdicional = null;
    }

    /**
     * Metodo que permite eliminar informacion del conocimiento adicional que
     * tiene la persona
     *
     * @since 29/01/2014
     *
     */
    public void eliminarConocimientoAdicional() {
        try {
            this.conocimientoAdicionalManager.eliminar(this.conocimientoAdicionalDto);
            this.recuperarDtoPadre();
            showMessage(UtilCore.Internacionalizacion.getMensajeInternacional("form.general.mensaje.transaccion.ok"));
        } catch (Exception ex) {
            logger.error("ERROR DE SISTEMA", ex);
            showError(ex.getMessage());
        }
    }

    /**
     * Metodo que permite instanciar el objeto experienciaDto para ingresar
     * nuevos valores
     *
     * @since 29/01/2014
     *
     */
    public String nuevaExperiencia() {
        this.accionExperiencia = applicationMBean.getNuevo();
        this.experienciaDto = experienciaManager.inicializar();
        return "";
    }

    /**
     * Metodo que permite cargas los datos de un dto seleccionado para despues
     * editarlos
     *
     * @since 29/01/2014
     *
     */
    public String editarExperiencia() {
        this.accionExperiencia = applicationMBean.getEditar();
        return "";
    }

    /**
     * Metodo que permite cargar los datos a un dto para despues verlos en un
     * popup
     *
     * @since 29/01/2014
     *
     */
    public String verExperiencia() {
        this.accionExperiencia = applicationMBean.getVer();
        return "";
    }

    /**
     * Metodo que permite eliminar un registro de la experiencia que tiene la
     * persona
     *
     * @since 29/01/2014
     *
     */
    public void eliminarExperiencia() {
        try {
            this.experienciaManager.eliminar(this.experienciaDto);
            this.recuperarDtoPadre();
            showMessage(UtilCore.Internacionalizacion.getMensajeInternacional("form.general.mensaje.transaccion.ok"));
        } catch (Exception ex) {
            logger.error("ERROR DE SISTEMA", ex);
            showError(ex.getMessage());
        }
    }

    /**
     * Metodo que permite agregar un registro de la experiencia que tiene la
     * persona
     *
     * @since 29/01/2014
     *
     */
    public String agregarExperiencia() {
        if (isValidDatosExperiencia(this.experienciaDto) == false) {
            logger.info("Se aborta el proceso de grabado.");
            return "";
        }
        return this.experienciaManager.guardar(this.experienciaDto, this.accionExperiencia, this.dto);
    }

    /**
     * Metodo que permite agregar un registro de las referencias que tiene la
     * persona
     *
     * @since 29/01/2014
     */
    public void agregarReferencia() {
        try {
            ReferenciaDto referenciaDto = new ReferenciaDto();
            referenciaDto.setPersonaDto(this.dto);
            referenciaDto.setDescripcion(this.descripcionReferencia);
            if (isValidDatosReferencia(referenciaDto) == false) {
                logger.info("Se aborta el proceso de grabado.");
                return;
            }
            this.referenciaManager.nuevo(referenciaDto);
            recuperarDtoPadre();
            showMessage(UtilCore.Internacionalizacion.getMensajeInternacional("form.general.mensaje.transaccion.ok"));
        } catch (Exception ex) {
            logger.error("ERROR DE SISTEMA", ex);
        }
        this.descripcionReferencia = null;
    }

    /**
     * Metodo que permite eliminar un registro seleccionado
     *
     * @since 29/01/2014
     */
    public void eliminarReferencia() {
        try {
            this.referenciaManager.eliminar(this.referenciaDto);
            this.recuperarDtoPadre();
            showMessage(UtilCore.Internacionalizacion.getMensajeInternacional("form.general.mensaje.transaccion.ok"));
        } catch (Exception ex) {
            logger.error("ERROR DE SISTEMA", ex);
            showError(ex.getMessage());
        }
    }

    /**
     * Metodo que permite obtener el Dto Padre de la entidad actual
     *
     * @since 29/01/2014
     */
    protected void recuperarDtoPadre() {
        try {
            this.dto = this.manager.obtenerPersonaPorId(this.dto.getId());
        } catch (Exception ex) {
            logger.error("ERROR DE SISTEMA", ex);
            showError(ex.getMessage());
        }
    }

    public PersonaManager getManager() {
        return manager;
    }

    public void setManager(PersonaManager manager) {
        this.manager = manager;
    }

    public EstudioManager getEstudioManager() {
        return estudioManager;
    }

    public void setEstudioManager(EstudioManager estudioManager) {
        this.estudioManager = estudioManager;
    }

    public ExperienciaManager getExperienciaManager() {
        return experienciaManager;
    }

    public void setExperienciaManager(ExperienciaManager experienciaManager) {
        this.experienciaManager = experienciaManager;
    }

    public RecursosManager getRecursosManager() {
        return recursosManager;
    }

    public void setRecursosManager(RecursosManager recursosManager) {
        this.recursosManager = recursosManager;
    }

    public int getAccionEstudio() {
        return accionEstudio;
    }

    public void setAccionEstudio(int accionEstudio) {
        this.accionEstudio = accionEstudio;
    }

    public EstudioDto getEstudioDto() {
        return estudioDto;
    }

    public void setEstudioDto(EstudioDto estudioDto) {
        this.estudioDto = estudioDto;
    }

    public List<ParametroDto> getListaNivel() {
        return this.recursosManager.addParametroaListaParametroPorCatalogo(this.recursosManager.obtenerParametrosActivosPorCatalogoExceptoAlgunos(ConstantesCore.CatalogoParametro.NIVEL_ESTUDIO, ConstantesCore.Parametro.NIVEL_ESTUDIO_OTROS), ConstantesCore.Parametro.NIVEL_ESTUDIO_OTROS);
    }

    public void setListaNivel(List<ParametroDto> listaNivel) {
        this.listaNivel = listaNivel;
    }

    public List<ParametroDto> getListaEstadoEstudio() {
        return this.recursosManager.obtenerParametrosActivosPorCatalogoSistema(ConstantesCore.CatalogoParametro.ESTADO_ESTUDIO);
    }

    public void setListaEstadoEstudio(List<ParametroDto> listaEstadoEstudio) {
        this.listaEstadoEstudio = listaEstadoEstudio;
    }

    public List<ParametroDto> getListaProfesion() {
        return this.recursosManager.obtenerParametrosActivosPorCatalogoSistema(ConstantesCore.CatalogoParametro.AREA_ESTUDIO);
    }

    public void setListaProfesion(List<ParametroDto> listaProfesion) {
        this.listaProfesion = listaProfesion;
    }

    public List<PersonaDto> getLista() {
        return lista;
    }

    public void setLista(List<PersonaDto> lista) {
        this.lista = lista;
    }

    public PersonaDto getDto() {
        return dto;
    }

    public void setDto(PersonaDto dto) {
        this.dto = dto;
    }

    public PersonaDto getDtoFiltro() {
        return dtoFiltro;
    }

    public void setDtoFiltro(PersonaDto dtoFiltro) {
        this.dtoFiltro = dtoFiltro;
    }

    public String getKeyTitulo() {
        return keyTitulo;
    }

    public void setKeyTitulo(String keyTitulo) {
        this.keyTitulo = keyTitulo;
    }

    public ApplicationMBean getApplicationMBean() {
        return applicationMBean;
    }

    public void setApplicationMBean(ApplicationMBean applicationMBean) {
        this.applicationMBean = applicationMBean;
    }

    public SessionMBean getSessionMBean() {
        return sessionMBean;
    }

    public void setSessionMBean(SessionMBean sessionMBean) {
        this.sessionMBean = sessionMBean;
    }

    public List<ParametroDto> getListaSexosFiltro() {
        return this.recursosManager.obtenerParametrosActivosPorCatalogoSistemaAdd(catalogoManager.getCatGenero(), parametroManager.getIdTodos());
    }

    public void setListaSexosFiltro(List<ParametroDto> listaSexosFiltro) {
        this.listaSexosFiltro = listaSexosFiltro;
    }

    public List<ParametroDto> getListaEstadoCivilFiltro() {
        return this.recursosManager.obtenerParametrosActivosPorCatalogoSistemaAdd(catalogoManager.getCatEstCivil(), parametroManager.getIdTodos());
    }

    public void setListaEstadoCivilFiltro(List<ParametroDto> listaEstadoCivilFiltro) {
        this.listaEstadoCivilFiltro = listaEstadoCivilFiltro;
    }

    public List<ParametroDto> getListaTipoDocumentoFiltro() {
        return this.recursosManager.obtenerParametrosActivosPorCatalogoSistemaAdd(catalogoManager.getIdCatalogoTipoDocumento(), parametroManager.getIdTodos());
    }

    public List<ParametroDto> getListaSexos() {
        return this.recursosManager.obtenerParametrosActivosPorCatalogoSistema(catalogoManager.getCatGenero());
    }

    public void setListaSexos(List<ParametroDto> listaSexos) {
        this.listaSexos = listaSexos;
    }

    public List<ParametroDto> getListaEstadoCivil() {
        return this.recursosManager.obtenerParametrosActivosPorCatalogoSistema(catalogoManager.getCatEstCivil());
    }

    public void setListaEstadoCivil(List<ParametroDto> listaEstadoCivil) {
        this.listaEstadoCivil = listaEstadoCivil;
    }

    public List<ParametroDto> getListaTipoDocumento() {
        return this.recursosManager.obtenerParametrosActivosPorCatalogoSistema(catalogoManager.getIdCatalogoTipoDocumento());
    }

    public void setListaTipoDocumento(List<ParametroDto> listaTipoDocumento) {
        this.listaTipoDocumento = listaTipoDocumento;
    }

    public List<MonedaDto> getListaTipoMoneda() throws DAOException {
        return monedaManager.obtenerMonedasActivasPorEmpresa();
    }

    public void setListaTipoMoneda(List<MonedaDto> listaTipoMoneda) {
        this.listaTipoMoneda = listaTipoMoneda;
    }

    public Boolean getAccesoBtnGuardar() {
        return accesoBtnGuardar;
    }

    public void setAccesoBtnGuardar(Boolean accesoBtnGuardar) {
        this.accesoBtnGuardar = accesoBtnGuardar;
    }

    public IdiomaDto getIdiomaDto() {
        return idiomaDto;
    }

    public void setIdiomaDto(IdiomaDto idiomaDto) {
        this.idiomaDto = idiomaDto;
    }

    public ParametroDto getIdiomaParametroDto() {
        return idiomaParametroDto;
    }

    public void setIdiomaParametroDto(ParametroDto idiomaParametroDto) {
        this.idiomaParametroDto = idiomaParametroDto;
    }

    public String getOral() {
        return oral;
    }

    public void setOral(String oral) {
        this.oral = oral;
    }

    public String getEscrito() {
        return escrito;
    }

    public void setEscrito(String escrito) {
        this.escrito = escrito;
    }

    public IdiomaManager getIdiomaManager() {
        return idiomaManager;
    }

    public void setIdiomaManager(IdiomaManager idiomaManager) {
        this.idiomaManager = idiomaManager;
    }

    public List<ParametroDto> getListaIdioma() {
        return this.recursosManager.obtenerParametrosActivosPorCatalogoSistema(catalogoManager.getCatIdiomas());
    }

    public void setListaIdioma(List<ParametroDto> listaIdioma) {
        this.listaIdioma = listaIdioma;
    }

    public ConocimientoInformaticaDto getInformaticaDto() {
        return informaticaDto;
    }

    public void setInformaticaDto(ConocimientoInformaticaDto informaticaDto) {
        this.informaticaDto = informaticaDto;
    }

    public ParametroDto getInformaticaParametroDto() {
        return informaticaParametroDto;
    }

    public void setInformaticaParametroDto(ParametroDto informaticaParametroDto) {
        this.informaticaParametroDto = informaticaParametroDto;
    }

    public String getNivelInformatica() {
        return nivelInformatica;
    }

    public void setNivelInformatica(String nivelInformatica) {
        this.nivelInformatica = nivelInformatica;
    }

    public ConocimientoInformaticaManager getInformaticaManager() {
        return informaticaManager;
    }

    public void setInformaticaManager(ConocimientoInformaticaManager informaticaManager) {
        this.informaticaManager = informaticaManager;
    }

    public List<ParametroDto> getListaHerramientaOffice() {
        return this.recursosManager.obtenerParametrosActivosPorCatalogoSistema(ConstantesCore.CatalogoParametro.HERRAMIENTA_INFORMATICA);
    }

    public void setListaHerramientaOffice(List<ParametroDto> listaHerramientaOffice) {
        this.listaHerramientaOffice = listaHerramientaOffice;
    }

    public ConocimientoAdicionalDto getConocimientoAdicionalDto() {
        return conocimientoAdicionalDto;
    }

    public void setConocimientoAdicionalDto(ConocimientoAdicionalDto conocimientoAdicionalDto) {
        this.conocimientoAdicionalDto = conocimientoAdicionalDto;
    }

    public String getTituloConocAdicional() {
        return tituloConocAdicional;
    }

    public void setTituloConocAdicional(String tituloConocAdicional) {
        this.tituloConocAdicional = tituloConocAdicional;
    }

    public String getDescripcionConocAdicional() {
        return descripcionConocAdicional;
    }

    public void setDescripcionConocAdicional(String descripcionConocAdicional) {
        this.descripcionConocAdicional = descripcionConocAdicional;
    }

    public ConocimientoAdicionalManager getConocimientoAdicionalManager() {
        return conocimientoAdicionalManager;
    }

    public void setConocimientoAdicionalManager(ConocimientoAdicionalManager conocimientoAdicionalManager) {
        this.conocimientoAdicionalManager = conocimientoAdicionalManager;
    }

    public int getAccionExperiencia() {
        return accionExperiencia;
    }

    public void setAccionExperiencia(int accionExperiencia) {
        this.accionExperiencia = accionExperiencia;
    }

    public ExperienciaDto getExperienciaDto() {
        return experienciaDto;
    }

    public void setExperienciaDto(ExperienciaDto experienciaDto) {
        this.experienciaDto = experienciaDto;
    }

    public List<ParametroDto> getListaArea() {
        return this.recursosManager.obtenerParametrosActivosPorCatalogoSistema(ConstantesCore.CatalogoParametro.AREA_EXPERIENCIA);
    }

    public void setListaArea(List<ParametroDto> listaArea) {
        this.listaArea = listaArea;
    }

    public List<ParametroDto> getListaIndustria() {
        return this.recursosManager.obtenerParametrosActivosPorCatalogoSistema(ConstantesCore.CatalogoParametro.INDUSTRIA);
    }

    public void setListaIndustria(List<ParametroDto> listaIndustria) {
        this.listaIndustria = listaIndustria;
    }

    public ReferenciaDto getReferenciaDto() {
        return referenciaDto;
    }

    public void setReferenciaDto(ReferenciaDto referenciaDto) {
        this.referenciaDto = referenciaDto;
    }

    public String getDescripcionReferencia() {
        return descripcionReferencia;
    }

    public void setDescripcionReferencia(String descripcionReferencia) {
        this.descripcionReferencia = descripcionReferencia;
    }

    public ReferenciaManager getReferenciaManager() {
        return referenciaManager;
    }

    public void setReferenciaManager(ReferenciaManager referenciaManager) {
        this.referenciaManager = referenciaManager;
    }

    public int getAccionPersona() {
        return accionPersona;
    }

    public void setAccionPersona(int accionPersona) {
        this.accionPersona = accionPersona;
    }

    public List<CalificacionDto> getListaEvaluaciones() {
        return listaEvaluaciones;
    }

    public void setListaEvaluaciones(List<CalificacionDto> listaEvaluaciones) {
        this.listaEvaluaciones = listaEvaluaciones;
    }

    public List<RequerimientoDto> getListaRequerimientoDto() {
        return listaRequerimientoDto;
    }

    public void setListaRequerimientoDto(List<RequerimientoDto> listaRequerimientoDto) {
        this.listaRequerimientoDto = listaRequerimientoDto;
    }

    public RequerimientoDto getRequerimientoDto() {
        return requerimientoDto;
    }

    public void setRequerimientoDto(RequerimientoDto requerimientoDto) {
        this.requerimientoDto = requerimientoDto;
    }

    public List<ParametroDto> getListaTipoDoc() {
        return this.recursosManager.obtenerParametrosActivosPorCatalogoSistemaAdd(catalogoManager.getIdCatalogoTipoDocumento(), ConstantesCore.Parametro.TODOS);
    }

    public void setListaTipoDoc(List<ParametroDto> listaTipoDoc) {
        this.listaTipoDoc = listaTipoDoc;
    }

    public List<ParametroDto> getListaSexo() {
        return this.recursosManager.obtenerParametrosActivosPorCatalogoSistemaAdd(catalogoManager.getCatGenero(), ConstantesCore.Parametro.TODOS);
    }

    public void setListaSexo(List<ParametroDto> listaSexo) {
        this.listaSexo = listaSexo;
    }

    public List<ParametroDto> getListaSedesFiltro() {
        return this.recursosManager.obtenerParametrosActivosPorCatalogoSistemaAdd(ConstantesSele.CatalogoParametro.SEDES, ConstantesCore.Parametro.TODOS);
    }

    public void setListaSedesFiltro(List<ParametroDto> listaSedesFiltro) {
        this.listaSedesFiltro = listaSedesFiltro;
    }

    public List<ParametroDto> getListaTiposArchivo() {
        return this.recursosManager.obtenerParametrosActivosPorCatalogoSistema(ConstantesCore.CatalogoParametro.ARCHIVO_TIPO);
    }

    public void setListaTiposArchivo(List<ParametroDto> listaTiposArchivo) {
        this.listaTiposArchivo = listaTiposArchivo;
    }

    public List<UbigeoDto> getListaPaises() {
        UbigeoManager m = (UbigeoManager) WebServletContextListener.getApplicationContext().getBean("ubigeoManager");
        try {
            return m.obtenerPaisesActivosPorEmpresa();
        } catch (DAOException ex) {
            logger.error(ex);
            return new ArrayList<UbigeoDto>();
        }
    }

    public void setListaPaises(List<UbigeoDto> listaPaises) {
        this.listaPaises = listaPaises;
    }

    public List<ParametroDto> getListaCentRiesgo() throws DAOException {
        CatalogoManager catalogoManager = (CatalogoManager) WebServletContextListener.getApplicationContext().getBean("catalogoManager");
        return catalogoManager.obtenerParametrosActivosPorCatalogoAdd(ConstantesPlan.Catalogo.CENT_RIESGO, parametroManager.getIdNinguno());
    }

    public void setListaCentRiesgo(List<ParametroDto> listaCentRiesgo) {
        this.listaCentRiesgo = listaCentRiesgo;
    }

    public List<ParametroDto> getListaTasaRiesgo() throws DAOException {
        return parametroManager.obtenerParametrosActivosPorCatalogoSistema(ConstantesPlan.Catalogo.TASA_RIESGO);
    }

    public void setListaTasaRiesgo(List<ParametroDto> listaTasaRiesgo) {
        this.listaTasaRiesgo = listaTasaRiesgo;
    }

    public List<ParametroDto> getListaTipoRiesgo() throws DAOException {
        CatalogoManager catalogoManager = (CatalogoManager) WebServletContextListener.getApplicationContext().getBean("catalogoManager");
        return catalogoManager.obtenerParametrosActivosPorCatalogoAdd(ConstantesPlan.Catalogo.TIPO_RIESGO, parametroManager.getIdNinguno());
    }

    public void setListaTipoRiesgo(List<ParametroDto> listaTipoRiesgo) {
        this.listaTipoRiesgo = listaTipoRiesgo;
    }

    public List<AfpDto> getListaAfp() throws DAOException {
        AfpManager afpManager = (AfpManager) WebServletContextListener.getApplicationContext().getBean("afpManager");
        return afpManager.obtenerAfp(new AfpDto());
    }

    public void setListaAfp(List<AfpDto> listaAfp) {
        this.listaAfp = listaAfp;
    }

    public List<ParametroDto> getListaBancos() throws DAOException {
        ParametroManager parametroManager = (ParametroManager) WebServletContextListener.getApplicationContext().getBean("parametroManager");
        return parametroManager.obtenerParametrosActivosPorCatalogoSistema(ConstantesPlan.Catalogo.BANCO);
    }

    public void setListaBancos(List<ParametroDto> listaBancos) {
        this.listaBancos = listaBancos;
    }

    public List<ParametroDto> getListaTiposCuenta() throws DAOException {
        ParametroManager parametroManager = (ParametroManager) WebServletContextListener.getApplicationContext().getBean("parametroManager");
        return parametroManager.obtenerParametrosActivosPorCatalogoSistema(ConstantesPlan.Catalogo.TIPO_CUENTA);
    }

    public void setListaTiposCuenta(List<ParametroDto> listaTiposCuenta) {
        this.listaTiposCuenta = listaTiposCuenta;
    }

    public CroppedImage getCroppedImage() {
        return croppedImage;
    }

    public void setCroppedImage(CroppedImage croppedImage) {
        this.croppedImage = croppedImage;
    }

    public String getStrNombreFoto() {
        return strNombreFoto;
    }

    public void setStrNombreFoto(String strNombreFoto) {
        this.strNombreFoto = strNombreFoto;
    }

    public SelectItem[] getStrTipoComision() {
        return manager.siTipoComision();
    }

    public void setStrTipoComision(SelectItem[] strTipoComision) {
        this.strTipoComision = strTipoComision;
    }
}
